"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 8、数据驱动案列.py
"""

# 数据驱动案列： 数据的改变从而驱动自动化测试的执行，最终引起测试结果的改变
# 数据量小的可以使用代码的参数化实现
# 数据量大的情况可以使用结构化文件：yaml/json等 来对数据进行储存
# 然后在测试用例中读取这些数据


# 应用场景： App  Web  接口自动化
# 1、测试数据的数据驱动  2、测试步骤的数据驱动（分层）  3、配置的数据驱动（环境等数据）

"""
yaml格式说明：
1、字典中的值需要冒号后加空格  a: 2
2、- 表示列表
"""

import pytest
import yaml


# yml文件与测试用例在同一级
# 内置函数：open
# 第三方模块：yaml

class TestDemo:
    #   ================    读取yml文件  parametrize 如果参数中是字典格式(test: 127.0.0.1)，只获取yml文件中的 key ======================
    @pytest.mark.parametrize('env', yaml.safe_load(open('./env.yml')))
    def test_demo(self, env):
        if 'test' in env:
            print('这是测试环境')
            # 结果为：test
            print(env)
            # 获取字典的值 ：值为 127.0.0.1
            print(f"测试环境的ip是：{env['test']}")
        elif 'dev' in env:
            print('这是开发环境')
            # 结果为 ： 开发环境的ip是：127.0.0.1
            print(f"开发环境的ip是：{env['dev']}")

    #   字典格式： test: 127.0.0.1
    def test_yaml1(self):
        """
        yml数据：
        test: 127.0.0.1
        """
        """
        :return: 
        """
        #   结果为：{'test': '127.0.0.1'}
        print(yaml.safe_load(open('env.yml')))

    #   列表嵌套字典格式 - test: 127.0.0.1
    #   结果为：[{'test': '127.0.0.1'}]
    def test_yaml(self):
        """
        -
            test: 127.0.0.1
        :return:
        """
        # 结果为 ： [{'test': '127.0.0.1'}]
        print(yaml.safe_load(open('env.yml')))
